Ví dụ Prolog

Phần này trình bày một số chương trình ví dụ, nó có thể chạy tốt trong SWI-PROLOG.

QuickSort

split(H, [A|X], [A|Y], Z):-  order(A, H), split(H, X, Y, Z).split(H, [A|X], Y, [A|Z]):-  not(order(A, H)), split(H, X, Y, Z).split(_, [], [], []).quicksort([], X, X).quicksort([H|T], S, X):-  split(H, T, A, B),  quicksort(A, S, [H|Y]),  quicksort(B, Y, X).

Tháp Hà Nội

hanoi(N):- move(N, left, centre, right).move(0, _, _, _):-!.move(N, A, B, C):-  M is N-1,  move(M, A, C, B), inform(A, B), move(M, C, B, A).inform(X, Y):-  write([move, a, disc, from, the, X, pole, to, the, Y, pole]),  nl.

Đại số

/* Tính đạo hàm */d(X,X,1):-!.                                        /* d x     dx = 1                     */d(C,X,0):- atomic(C).                                /* d c     dx = 0                     */d(-U,X,-A):- d(U,X,A).                               /* d -u    dx = - d u dx              */   d(U+V,X,A+B):- d(U,X,A), d(V,X,B).                   /* d u+v   dx = d u dx + d v dx       */d(U-V,X,A-B):- d(U,X,A), d(V,X,B).                   /* d u-v   dx = d u dx - d v dx       */d(C*U,X,C*A):- atomic(C), C \= X, d(U,X,A),!.       /* d c*u   dx = c*d u dx              */d(U*V,X,B*U+A*V):- d(U,X,A), d(V,X,B).               /* d u*v   dx = u*d v dx + v*d u dx   */ d(U/V,X,A):- d(U*V^(-1),X,A).                        /* d u/v   dx = d (u*v)^-1 dx         */d(U^C,X,C*U^(C-1)*W):- atomic(C), C \= X, d(U,X,W).  /* d u^c   dx = c*u^(c-1)*d u dx      */d(log(U),X,A*U^(-1)):- d(U,X,A).                     /* d ln(u) dx = u^-1 * d u dx         */
/* Tính tích phân */i(0,X,0):-!.                                        /* Int 0   dx = 0                     */i(X,X,(X*X)/2):-!.                                  /* Int X   dx = (X^2)/2               */i(C,X,C*X):- atomic(C).                              /* Int c   dx = c*x                   */i(-U,X,-A):- i(U,X,A).                               /* Int -U  dx = - Int U dx            */i(U+V,X,A+B):- i(U,X,A), i(V,X,B).                   /* Int U+V dx = Int U dx + Int V dx   */ i(U-V,X,A-B):- i(U,X,A), i(V,X,B).                   /* Int U-V dx = Int U dx - Int V dx   */i(C*U,X,C*A):- atomic(C), C \= X, i(U,X,A),!.       /* Int cU  dx = c (Int U dx)          */i(X^C,X,(X^(C+1))/(C+1)):- atomic(C),!.             /* Int x^c dx = x^(c+1)/(c+1)         */i(U,V,U*V-A):- d(V,U,A),!.                          /* Int u   dv = u*v - Int v du        */
/* Một số luật đơn giản */s(+,X,0,X).                                           /* x + 0 = x                          */s(+,0,X,X).                                           /* 0 + x = x                          */s(+,X,Y,X+Y).                                         /* x + y = x + y                      */s(+,X,Y,Z):- integer(X), integer(Y), Z is X+Y.       /* x + y = z             <- Calculate */s(*,_,0,0).                                           /* anything * 0 = 0                   */s(*,0,_,0).                                           /* 0 * anything = 0                   */s(*,1,X,X).                                           /* 1 * x = x                          */s(*,X,1,X).                                           /* x * 1 = x                          */s(*,X,Y,X*Y).                                         /* x * y = x * y                      */s(*,X*Y,W,X*Z):- integer(Y), integer(W), Z is Y*W.   s(*,X,Y,Z):- integer(X), integer(Y), Z is X*Y.       /* x * y = z             <- Calculate */
/* Đơn giản hoá */simp(E,E):- atomic(E),!.simp(E,F):- E =.. [Op, La, Ra], simp(La,X), simp(Ra,Y), s(Op,X,Y,F).

Tài liệu tham khảo

WikiPedia: Prolog http://www.csse.monash.edu.au/~lloyd/tildeLogic/Pr... http://www.cs.kuleuven.ac.be/~remko/prolog/faq/fil... http://www.amzi.com/AdventureInProlog/advfrtop.htm http://www.amzi.com/ExpertSystemsInProlog/index.ht... http://eclipse.crosscoreop.com/ http://www.declarativa.com/interprolog/ http://inap.dialogengines.com http://www.visual-prolog.com/vip6/community/exampl... http://www.visual-prolog.com/vip6/tutorial/ http://kti.ms.mff.cuni.cz/~bartak/prolog/index.htm...